package com.jbookstore.dao.daoImpl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.NumberFormat;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import com.jbookstore.dao.CartDao;
import com.jbookstore.dto.BookDto;
import com.jbookstore.dto.CartDto;
/**
 * 장바구니 관련 db 접근 클래스  
 * @author 배혜원
 *
 */
public class CartDaoImpl implements CartDao {

	@Autowired private JdbcTemplate jdbcTemplate;
	
	// 장바구니 도서 조회 
	private final String SELECT_CART_BY_USERID = 
				"SELECT b.book_id, b.title, b.author, b.publisher, b.price, c.qty " +
				"FROM book b, cart_book c " +
				"WHERE b.book_id = c.book_id " +
				"AND c.user_id = ?";
		
	// 장바구니 하나 넣기 
	private final String INSERT_CART_ONE = "INSERT INTO cart_book VALUES(?, ?, ?)";
	
	// 장바구니 하나 삭제 
	private final String DELETE_CART_ONE = "DELETE FROM cart_book " +
												 "WHERE user_id = ? AND book_id = ?";
	
	// 장바구니 도서 수량 수정
	private final String UPDATE_CART_ONE = "UPDATE cart_book " +
												 "set qty = ? " +
												 "where user_id = ? AND book_id = ?";

	// 회원아이디로 장바구니 조회
	public List<BookDto> selectCartBookList(String userId) {
		List<BookDto> cartBookList = this.jdbcTemplate.query(
				SELECT_CART_BY_USERID, new Object[]{userId},
				new RowMapper<BookDto>() {
				    public BookDto mapRow(ResultSet rs, int rowNum) throws SQLException {
				    	BookDto cartBook = new BookDto();
				    	cartBook.setBookId(rs.getString("book_id"));
				    	cartBook.setTitle(rs.getString("title"));
				    	cartBook.setAuthor(rs.getString("author"));
				    	cartBook.setPublisher(rs.getString("publisher"));
				    	NumberFormat nf = NumberFormat.getNumberInstance();;
						cartBook.setPrice(nf.format(rs.getInt("price")) + " 원");	
				    	cartBook.setQty(rs.getInt("qty"));
				      return cartBook;
				    }
				  });
		return cartBookList;
	}


	// 도서 한 권 장바구니 담기
	// return값 int로 변경하기
	public void insertCartOne(CartDto cartDto) {
		this.jdbcTemplate.update(INSERT_CART_ONE, 
				new Object[]{cartDto.getUserId(), cartDto.getBookId(), cartDto.getQty()});
	}
	
	// 도서 한 권 장바구니 삭제
	// return값 int로 변경하기
	public void deleteCartOne(CartDto cartDto) {
		this.jdbcTemplate.update(DELETE_CART_ONE, 
				new Object[]{cartDto.getUserId(), cartDto.getBookId()});
	}


	// 장바구니 도서 수량 update
	public void updateCartOne(CartDto cartDto) {
		this.jdbcTemplate.update(UPDATE_CART_ONE, 
				new Object[]{cartDto.getQty(), cartDto.getUserId(), cartDto.getBookId()});
	}
}
